<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * HITI Web Develop
 *
 * @package     HITI Web Dev     
 * @category    Controllers
 * @see         Home
 * @author      PHUOCNGUYEN - HITI Dev Team
 * @copyright   Copyright (c) 2013, HITI Corp
 */

$GLOBALS['orders_status'] = array(
    'Chờ xác nhận',
    'Xác nhận thành công',
    'Xác nhận thất bại',
    'Đã thanh toán',
    'Chưa thanh toán',
    'Chưa giao hàng',
    'Đang giao hàng',
    'Đã giao hàng',
    'Đã hủy'
);

// ------------------------------------------------------------------------

/**
 * Hàm get_data
 *
 * Lấy giá trị của một field hoặc tất cả field từ bảng dữ liệu
 *
 * @access  public
 * @param   table name
 * @param   [, where condition = '']
 * @param   [, field = *]
 * @param   [, start = '']
 * @param   [, limit = '']
 * @param   [, order = '']
 * @return  field value if (field='field name')
 * @return  data array if (field='*')
 */
if ( ! function_exists('get_data'))
{
    function get_data($table, $where = '', $field = '*', $start = '', $limit = '', $order = '')
    {
    	$ci =& get_instance();
    	if($field != '*') $ci->db->select($field);
    	if($where != "") $ci->db->where($where);
        if($order != "") $ci->db->order_by($order);
        if (is_numeric($start) && is_numeric($start)) $ci->db->limit($limit, $start);
    	$q = $ci->db->get($table);
        if ($q->num_rows() > 0)
        {
        	$data = $q->row_array();
        	if ($field != '*') return $data[$field];
        	else return $data;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm goodfile
 *
 * Kiểm tra sự tồn tại một tệp tin
 *
 * @access  public
 * @param   string file path
 * @return  true/false
 */
if ( ! function_exists('goodfile'))
{
    function goodfile($file)
    { 
        $invalidChars = array('\'','"',';','>','<','.php'); 
        $file = str_replace($invalidChars, '', $file);
        unset($invalidChars);
        if (file_exists($file) && is_file($file)) return true; 
        return false;
    }
}


// ------------------------------------------------------------------------

/**
 * Hàm randomkeys
 *
 * Tạo chuỗi ký tự ngẫu nhiên gồm chữ in hoa và số
 *
 * @access  public
 * @param   int len
 * @return  string random
 */
if ( ! function_exists('randomkeys'))
{
    function randomkeys($length)
    {
        $key = '';
        $pattern = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        for($i=0; $i < $length; $i++) $key .= $pattern{rand(0,35)};
        unset($pattern);
        return $key;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm randomkeys_number
 *
 * Tạo chuỗi ký tự ngẫu nhiên chỉ gồm số
 *
 * @access  public
 * @param   int len
 * @return  string random number
 */
if ( ! function_exists('randomkeys_number'))
{
    function randomkeys_number($length)
    {
        $key = '';
        $pattern = '1234567890';
        for($i = 0; $i < $length; $i++) $key .= $pattern{rand(0,35)};
        unset($pattern);
        return $key;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strip_input
 *
 * Chuyển các ký tự đặc biệt (", ', \, <, >) sang mã tương ứng
 *
 * @access  public
 * @param   string
 * @return  string
 */
if ( ! function_exists('strip_input'))
{
    function strip_input($text)
    {
        if (QUOTES_GPC) $text = stripslashes($text);
        $search = array('"', '\'', '\\', '<', '>'); 
        $replace = array('&quot;', '&#39;', '&#92;', '&lt;', '&gt;');
        $text = str_replace($search, $replace, $text);
        unset($search, $replace);
        return $text;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm destrip_input
 *
 * Chuyển các mã ('&quot;', '&#39;', '&#92;', '&lt;', '&gt;') sang ký tự tương ứng
 *
 * @access  public
 * @param   string
 * @return  string
 */
if ( ! function_exists('destrip_input'))
{
    function destrip_input($text)
    {
        if (QUOTES_GPC) $text = stripslashes($text);
        $search = array('&quot;', '&#39;', '&#92;', '&lt;', '&gt;'); 
        $replace = array('"', '\'', '\\', '<', '>');
        $text = str_replace($search, $replace, $text);
        unset($search, $replace);
        return $text;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm page_list
 *
 * Tạo phân trang cho danh sách dữ liệu bảng
 *
 * @access  public
 * @param   int total : Tổng số hàng trong bảng
 * @param   [, int limit = 0] : Số mục trong 1 trang
 * @param   [, boolean ajax = false] : Định dạng liên kết chuyển trang
 * @return  html text
 */
if ( ! function_exists('page_list'))
{
    function page_list($total, $limit = 12, $ajax = false)
    {
        $res = '';
        $href = 'javascript:;';
        $start = $GLOBALS['var']['rowstart'];
        if ($start == '') $start = 1;
        $link = $GLOBALS['var']['act'].($GLOBALS['var']['do'] ? '/'.$GLOBALS['var']['do'] : '').'/page-';
        $q = '';
        if ($GLOBALS['var']['q'])
        {
            $q = '?q='.$GLOBALS['var']['q'];
        }
        $pg_cnt = ceil($total / $limit);
        $range = 5;
        if($pg_cnt <= 1) return "";
        $idx_back = $start - 1;
        $idx_next = $start + 1;
        $cur_page = $start;
        if($idx_back >= 0)
        {
            if($cur_page > ($range + 1))
            {
                if (!$ajax) $href = $link.'1';
                $res .= '<a href="'.$href.$q.'" data-page="1">1</a><a href="javascript:;">...</a>';
            }
        }
        $idx_fst = max($cur_page - $range, 1);
        $idx_lst = min($cur_page + $range, $pg_cnt);
        if($range == 0)
        {
            $idx_fst = 1;
            $idx_lst = $pg_cnt;
        }
        for($i = $idx_fst; $i <= $idx_lst; $i++)
        {
            if ($i == $cur_page)
            {
                $res .= '<a href="javascript:;" style="cursor: default;" class="active">'.$i.'</a>';
            }
            else
            {
                if (!$ajax) $href = $link.$i;
                $res .= '<a href="'.$href.$q.'" data-page="'.$i.'">'.$i.'</a>';
            }
        }
        if($idx_next < $total)
        {
            if($cur_page < ($pg_cnt - $range))
            {
                if (!$ajax) $href = $link.$pg_cnt;
                $res .= '<a href="javascript:;"" style="cursor: default;">...</a><a href="'.$href.$q.'" data-page="'.$pg_cnt.'"> '.$pg_cnt.'</a>';
            }
        }
        $foward = $cur_page + 1;
        $backward = $cur_page - 1;
        $first = 1;
        $last = $pg_cnt;
        if($cur_page > 1)
        {
            if (!$ajax) $href = $link.$backward;
            $res = '<a href="'.$href.$q.'" data-page="'.$backward.'" class="prev">&lt;</a>'.$res;
            if($cur_page > 2)
            {
                if (!$ajax) $href = $link.$first;
                $res = '<a href="'.$href.$q.'" data-page="'.$first.'" class="first">&lt;&lt;</a>'.$res;
            }
        }
        if($cur_page < $pg_cnt)
        {
            if (!$ajax) $href = $link.$foward;
            $res .= '<a href="'.$href.$q.'" data-page="'.$foward.'" class="next">&gt;</a>';
            if($pg_cnt - $cur_page > 1)
            {
                if (!$ajax) $href = $link.$last;
                $res .= '<a href="'.$href.$q.'" data-page="'.$last.'" class="last">&gt;&gt;</a>';
            }
        }
        return '<div class="paging">'.$res.'</div>';
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm trimlink
 *
 * Cắt chuỗi với độ dài nhập vào
 *
 * @access  public
 * @param   string text : Chuỗi cần cát
 * @param   int lenght : Độ dài giới hạn
 * @param   [, boolean html = false] : Thay thế các mã html
 * @return  html text
 */
if ( ! function_exists('trimlink'))
{
    function trimlink($text, $length, $html = true)
    {
        $dec = array("&", "\"", "'", "\\", '\"', "\'", "<", ">");
        $enc = array("&amp;", "&quot;", "&#39;", "&#92;", "&quot;", "&#39;", "&lt;", "&gt;");
        if($html) $text = str_replace($enc, $dec, $text);
        if(strlen($text) > $length) {
            $len=0;
            $arr = explode(" ", $text);         
            $newtext = "";
            if(sizeof($arr) > 1) {
                for($i=0; $i<sizeof($arr); $i++){
                    if($len < $length - 3) {
                        $newtext .= $arr[$i]." ";
                        $len += strlen($arr[$i]) + 1;
                    }
                }
            } else {
                $newtext = substr($arr[0], 0, $length);
            }
            unset($i, $len, $arr, $dec, $enc);
            return $newtext."...";
        } else {
           unset($dec, $enc);
           return $text;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm google_map
 *
 * Tạo google map script
 *
 * @access  public
 * @param   [, boolean autoShow = true] : Tự động load map
 * @return  html text
 */
if ( ! function_exists('google_map'))
{
    function google_map($autoShow = 1)
    {
        $GLOBALS['cfg']['google_map'] = str_replace('&amp;','&', destrip_input($GLOBALS['cfg']['google_map']));
        $checkMapStr = explode('&ll=', $GLOBALS['cfg']['google_map']);
        if(count($checkMapStr) > 1)
        {
            $html = '';
            $check2MapStr = explode('&',$checkMapStr[1]);
            $location = explode(',', $check2MapStr[0]);
            $html .= '<script src="http://maps.google.com/maps/api/js?sensor=false&language=vi"></script>';
            $html .= '<script>';
            $html .= 'var map_title = "'.$GLOBALS['cfg']['company_name'].'";';
            $html .= 'var map_lat = "'.$location[0].'", map_lng = "'.$location[1].'";';
            $html .= 'var map_conent = "<div><h1 style=\"font-size:14px; color:green; padding: 0px; margin: 5px 0px;\">'.$GLOBALS['cfg']['company_name'].'</h1><h3 style=\"font-size:12px; padding: 0px;\">'.$GLOBALS['cfg']['phone'].'</h3><p>'.$GLOBALS['cfg']['address'].'</p></div>";';
            $html .= ($autoShow ? '$(document).ready(makeMap);' : '');
            $html .= '</script>';
            return $html;
        }
        else
        {
            return $GLOBAL['cfg']['google_map'];
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm range_week
 *
 * Tính ngày bắt đầu và kết thúc một tuần với một chuỗi thời gian
 *
 * @access  public
 * @param   [string time (YYYY-MM-DD)]
 * @return  array(star, end)
 */
if ( ! function_exists('range_week'))
{
    function range_week($datestr = '')
    {
        $dt = $datestr ? strtotime($datestr) : time();
        $res['start'] = date('N', $dt) == 1 ? date('Y-m-d', $dt) : date('Y-m-d', strtotime('last monday', $dt));
        $res['end'] = date('N', $dt) == 7 ? date('Y-m-d', $dt) : date('Y-m-d', strtotime('next sunday', $dt));
        return $res;
    }
}

function ajax_page_list($target, $total, $limit = 12, $start = 1)
{
    $res = '';
    $href = 'javascript:;';
    $pg_cnt = ceil($total / $limit);
    $range = 5;
    if($pg_cnt <= 1) return '';
    $idx_back = $start - 1;
    $idx_next = $start + 1;
    $cur_page = $start;
    if($idx_back >= 0)
    {
        if($cur_page > ($range + 1))
        {
            $res .= '<a href="'.$href.'" data-page="1">1</a><a href="javascript:;">...</a>';
        }
    }
    $idx_fst = max($cur_page - $range, 1);
    $idx_lst = min($cur_page + $range, $pg_cnt);
    if($range == 0)
    {
        $idx_fst = 1;
        $idx_lst = $pg_cnt;
    }
    for($i = $idx_fst; $i <= $idx_lst; $i++)
    {
        if ($i == $cur_page)
        {
            $res .= '<a class="active" href="javascript:;" style="cursor: default;">'.$i.'</a>';
        }
        else
        {
            $res .= '<a href="'.$href.'" data-page="'.$i.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')">'.$i.'</a></li>';
        }
    }
    if($idx_next < $total)
    {
        if($cur_page < ($pg_cnt - $range))
        {
            $res .= '<a href="javascript:;" style="cursor: default;">...</a><a href="'.$href.'" data-page="'.$pg_cnt.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')"> '.$pg_cnt.'</a>';
        }
    }
    $foward = $cur_page + 1;
    $backward = $cur_page - 1;
    $first = 1;
    $last = $pg_cnt;
    if($cur_page > 1)
    {
        $res = '<a href="'.$href.'" data-page="'.$backward.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')" class="prev">&lt;</a>'.$res;
        if($cur_page > 2)
        {
            $res = '<a href="'.$href.'" data-page="'.$first.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')" class="first">&lt;&lt;</a>'.$res;
        }
    }
    if($cur_page < $pg_cnt)
    {
        $res .= '<a href="'.$href.'" data-page="'.$foward.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')" class="next">&gt;</a>';
        if($pg_cnt - $cur_page > 1)
        {
            $res .= '<a href="'.$href.'" data-page="'.$last.'" onclick="ajax_page($(this).data(\'page\'), \''.$target.'\')" class="last">&gt;&gt;</a>';
        }
    }
    return '<div class="paging">'.$res.'</div>';
}

// ------------------------------------------------------------------------

/**
 * Hàm get_price
 *
 * Lấy giá theo số lượng từ list giá
 *
 * @access  public
 * @param   int ID sản phẩm
 * @param   int số lượng mua
 * @param   p, string list giá có sẳn, không cần truy cập database sản phẩm]
 * @return  int giá
 */
if ( ! function_exists('get_price'))
{
    function get_price($id, $qty, $pricelist = '')
    {
        $ci =& get_instance();
        $ci->db->select('gia2');
        $ci->db->where('id', $id);
        $query = $ci->db->get('products');
        $data = $query->row_array();
        $price = $data['gia2'];
        return $price;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm file_extension
 *
 * Lấy phần mở rộng một tệp tin
 *
 * @access  public
 * @param   string file name
 * @return  string
 */
if ( ! function_exists('file_extension'))
{
    function file_extension($file)
    {
        return @end(explode('.', strtolower($file)));
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm format_size
 *
 * Định dạng kiểu hiển thị dung lượng lưu trữ (B, KB, MB, GB, TB, PB)
 *
 * @access  public
 * @param   int byte size
 * @return  string size
 */
if ( ! function_exists('format_size'))
{
    function format_size($size) {
        $mod = 1024;
        $units = explode(' ','B KB MB GB TB PB');
        for ($i = 0; $size > $mod; $i++) {
            $size /= $mod;
        }
        unset($mod);
        return round($size, 2).' '.$units[$i];
    }
}


// ------------------------------------------------------------------------

/**
 * Hàm doiso
 *
 * Đọc số bằng chữ
 *
 * @access  public
 * @param   int number
 * @return  string text of num
 */
if ( ! function_exists('doiso'))
{
    function doiso($so)
    { 
        if (($so < 0) || ($so > 999999999999))
        {
            return $so;
        }
        $Ty = floor($so / 1000000000);/* Tỷ  */
        $so -= $Ty * 1000000000;
        $Gn = floor($so / 1000000);  /* Triệu (giga) */ 
        $so -= $Gn * 1000000; 
        $kn = floor($so / 1000);     /* Ngàn (kilo) */ 
        $so -= $kn * 1000; 
        $Hn = floor($so / 100);      /* Trăm (hecto) */ 
        $so -= $Hn * 100; 
        $Dn = floor($so / 10);       /* Mười (deca) */ 
        $n = $so % 10;             
        $res = ''; 
        if ($Ty) $res .= doiso($Ty) . ' tỷ';    
        if ($Gn)
        { 
            $res .= (empty($res) ? '' : ' ') .
            doiso($Gn) . ' triệu'; 
        } 
        if ($kn)
        { 
            $res .= (empty($res) ? '' : ' ') . 
            doiso($kn) . ' ngàn'; 
        } 
        if ($Hn)
        { 
            $res .= (empty($res) ? '' : ' ') . 
            doiso($Hn) . ' trăm'; 
        } 
        $mot = array('', 'một', 'hai', 'ba', 'bốn', 'năm', 'sáu', 'bảy', 'tám', 'chín', 'mười', 'mười một', 'mười hai', 'mười ba', 'mười bốn', 'mười lăm', 'mười sáu', 'mười bảy', 'mười tám', 'mười chín'); 
        $mot2 = array('', 'mốt', 'hai', 'ba', 'bốn', 'lăm', 'sáu', 'bảy', 'tám', 'chín', 'mười', 'mười một', 'mười hai', 'mười ba', 'mười bốn', 'mười lăm', 'mười sáu', 'mười bảy', 'mười tám', 'mười chín'); 
        $hangmuoi = array('', '', 'hai mươi', 'ba mươi', 'bốn mươi', 'năm mươi', 'sáu mươi', 'bảy mươi', 'tám mươi', 'chín mươi'); 
        if ($Dn || $n)
        { 
            if (!empty($res)) $res .= ' '; 
            if ($Dn < 2) $res .= $mot[$Dn * 10 + $n]; 
            else
            { 
                $res .= $hangmuoi[$Dn]; 
                if ($n) $res .= ' ' . $mot2[$n]; 
            } 
        } 
        if (empty($res)) $res = 'không';
        return $res; 
    }
}

/**
 * Hàm vnd2usd
 *
 * Chuyển VND sang USD
 *
 * @access  public
 * @param   int VND
 * @param   int tỉ giá USD
 * @return  int USD
 */
if ( ! function_exists('vnd2usd'))
{
    function vnd2usd($vnd, $rateExchange = 21000)
    {
        return number_format($vnd / $rateExchange, 2);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm paypal_pphttppost
 *
 * Goi request len server cua paypal de xu ly
 *
 * @access  public
 * @param   mixed $methodName_
 * @param   mixed $version_
 * @param   mixed $nvpStr_
 * @return  mixed
 */
if ( ! function_exists('paypal_pphttppost'))
{
    function paypal_pphttppost($methodName_, $version_, $nvpStr_) 
    { 
        $version = urlencode($version_);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $GLOBALS['cfg']['paypal_api_endpoint']);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        $nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=".$GLOBALS['cfg']['paypal_api_password']."&USER=".$GLOBALS['cfg']['paypal_api_username']."&SIGNATURE=".$GLOBALS['cfg']['paypal_api_signature']."$nvpStr_";
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
        $httpResponse = curl_exec($ch);
        if(!$httpResponse) 
        {
            exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
        }
        $httpResponseAr = explode("&", $httpResponse);
        $httpParsedResponseAr = array();
        foreach ($httpResponseAr as $i => $value) 
        {
            $tmpAr = explode("=", $value);
            if(sizeof($tmpAr) > 1) 
            {
                $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
            }
        }
        if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr))
        {
            exit("Invalid HTTP Response for POST request($nvpreq) to ".$GLOBALS['cfg']['paypal_api_endpoint'].".");
        }
        return $httpParsedResponseAr;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm paypal_setexpress
 *
 * Goi request len server cua paypal de xu ly
 *
 * @access  public
 * @param   
 * @return  true/false
 */
if ( ! function_exists('paypal_setexpress'))
{
    function paypal_setexpress($code, $subtotal, $vat, $ship, $total, $items, $return, $cancel, $logo)
    {
        $nvpStr = '&PAYMENTACTION=Sale&CURRENCYCODE=USD&RETURNURL='.urlencode($return).'&CANCELURL='.urlencode($cancel).'&AMT='.urlencode($total).'&ALLOWNOTE=1&HDRIMG='.urlencode($logo).$items.'&ITEMAMT='.urlencode($subtotal).'&TAXAMT='.urlencode($vat).'&SHIPPINGAMT='.urlencode($ship).'&INVNUM='.urlencode($code);
        $httpResponseArray = paypal_pphttppost('SetExpressCheckout', '53.0', $nvpStr);
        if(substr_count($httpResponseArray["ACK"], 'Success') > 0)
        {
            return $httpResponseArray;
        } 
        else  
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm paypal_checkout
 *
 * Goi request len server cua paypal de xu ly
 *
 * @access  public
 * @param   
 * @return true/false
 */
if ( ! function_exists('paypal_checkout'))
{
    function paypal_checkout($payer, $token, $code, $subtotal, $vat, $ship, $total, $items, $return, $cancel, $logo)
    {
        $nvpStr = '&PAYMENTACTION=Sale&CURRENCYCODE=USD&RETURNURL='.urlencode($return).'&CANCELURL='.urlencode($cancel).'&AMT='.urlencode($total).'&ALLOWNOTE=1&HDRIMG='.urlencode($logo).$items.'&ITEMAMT='.urlencode($subtotal).'&TAXAMT='.urlencode($vat).'&SHIPPINGAMT='.urlencode($ship).'&INVNUM='.urlencode($code).'&PAYERID='.$payer.'&TOKEN='.$token;
        $httpResponseArray = paypal_pphttppost('DoExpressCheckoutPayment', '52.0', $nvpStr);
        if(substr_count($httpResponseArray["ACK"], 'Success') > 0)
        {
            return $httpResponseArray;                
        } 
        else  
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm nganluong_getrequesturl
 *
 * Tạo liên kết thanh toán quan Ngânlượng.vn
 *
 * @param string $code: Mã hoá đơn/Tên sản phẩm
 * @param int $total: Tổng tiền phải thanh toán
 * @param string $transaction: Tham số bổ sung, bạn có thể dùng để lưu các tham số tuỳ ý để cập nhật thông tin khi NgânLượng.vn trả kết quả về
 * @param string $return: Đường link dùng để cập nhật tình trạng hoá đơn tại website của bạn khi người mua thanh toán thành công tại NgânLượng.vn
 * @return url cần tạo
 */
if ( ! function_exists('nganluong_getrequesturl'))
{
    function nganluong_getrequesturl($code, $total, $transaction, $return)
    {
        $arr_param = array(
            'merchant_site_code'=>  strval($GLOBALS['cfg']['nganluong_merchantcode']),
            'return_url'        =>  strtolower(urlencode($return)),
            'receiver'          =>  strval($GLOBALS['cfg']['nganluong_merchantemail']),
            'transaction_info'  =>  strval($transaction),
            'order_code'        =>  strval($code),
            'price'             =>  strval($total)    
        );
        $secure_code ='';
        $secure_code = implode(' ', $arr_param) . ' ' . $GLOBALS['cfg']['nganluong_merchantpass'];
        $arr_param['secure_code'] = md5($secure_code);
        $redirect_url = $GLOBALS['cfg']['nganluong_url'];
        if (strpos($redirect_url, '?') === false)
        {
            $redirect_url .= '?';
        }
        else if (substr($redirect_url, strlen($redirect_url)-1, 1) != '?' && strpos($redirect_url, '&') === false)
        {
            $redirect_url .= '&';           
        }
        $url = '';
        foreach ($arr_param as $key=>$value)
        {
            if ($url == '')
                $url .= $key . '=' . $value;
            else
                $url .= '&' . $key . '=' . $value;
        }
        return $redirect_url.$url;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm nganluong_verifypaymenturl
 *
 * Kiểm tra sự chính xác của liên kết kết quả trả về từ Ngânlượng.vn
 *
 * @param string $code: Mã hoá đơn/tên sản phẩm
 * @param string $total: Tổng tiền đã thanh toán
 * @param string $transaction: Thông tin về giao dịch, Giá trị do website gửi sang
 * @param string $payment_id: Mã giao dịch tại NgânLượng.vn
 * @param int $payment_type: Hình thức thanh toán: 1 - Thanh toán ngay (tiền đã chuyển vào tài khoản NgânLượng.vn của người bán); 2 - Thanh toán Tạm giữ (tiền người mua đã thanh toán nhưng NgânLượng.vn đang giữ hộ)
 * @param string $error_text: Giao dịch thanh toán có bị lỗi hay không. $error_text == "" là không có lỗi. Nếu có lỗi, mô tả lỗi được chứa trong $error_text
 * @param string $secure_code: Mã checksum (mã kiểm tra)
 * @return true/false      
 */
if ( ! function_exists('nganluong_verifypaymenturl'))
{
    function nganluong_verifypaymenturl()
    {
        $ci =& get_instance();
        $error_text = $ci->input->get('error_text', true);
        // Tạo mã xác thực từ chủ web
        $str = '';
        $str .= ' ' . strval($ci->input->get('transaction_info', true));
        $str .= ' ' . strval($ci->input->get('order_code', true));
        $str .= ' ' . strval($ci->input->get('price', true));
        $str .= ' ' . strval($ci->input->get('payment_id', true));
        $str .= ' ' . strval($ci->input->get('payment_type', true));
        $str .= ' ' . strval($error_text);
        $str .= ' ' . strval($GLOBALS['cfg']['nganluong_merchantcode']);
        $str .= ' ' . strval($GLOBALS['cfg']['nganluong_merchantpass']);

        // Mã hóa các tham số
        $verify_secure_code = '';
        $verify_secure_code = md5($str);
        
        // Xác thực mã của chủ web với mã trả về từ nganluong.vn
        if ($error_text == '' && $verify_secure_code == $ci->input->get('secure_code', true))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm baokim_createrequesturl
 *
 * Xây dựng url chuyển đến BaoKim.vn thực hiện thanh toán
 * 
 * @param $code                 Mã đơn hàng
 * @param $total                Giá trị đơn hàng
 * @param $ship                 Phí vận chuyển
 * @param $tax                  Thuế
 * @param $return               Url trả về khi thanh toán thành công
 * @param $cancel               Url trả về khi hủy thanh toán
 * @return url cần tạo
 */
if ( ! function_exists('baokim_createrequesturl'))
{
    function baokim_createrequesturl($code, $total, $ship, $tax, $return, $cancel)
    {
        // Mảng các tham số chuyển tới baokim.vn
        $params = array(
            'merchant_id'       =>  strval($GLOBALS['cfg']['baokim_merchantcode']),
            'order_id'          =>  strval($code),
            'business'          =>  strval($GLOBALS['cfg']['baokim_merchantemail']),
            'total_amount'      =>  strval($total),
            'shipping_fee'      =>  strval($ship),
            'tax_fee'           =>  strval($tax),
            'order_description' =>  strval(''),
            'url_success'       =>  strtolower($return),
            'url_cancel'        =>  strtolower($cancel),
            'url_detail'        =>  strtolower(''),
            'payer_name'        =>  strval(''),
            'payer_email'       =>  strval(''),
            'payer_phone_no'    =>  strval(''),
            'shipping_address'  =>  strval(''),
            'currency'          =>  strval('VND')
        );
        ksort($params);

        $params['checksum'] = hash_hmac('SHA1',implode('', $params), $GLOBALS['cfg']['baokim_merchantpass']);

        //Kiểm tra  biến $redirect_url xem có '?' không, nếu không có thì bổ sung vào
        $redirect_url = $GLOBALS['cfg']['baokim_url'];
        if (strpos($redirect_url, '?') === false)
        {
            $redirect_url .= '?';
        }
        else if (substr($redirect_url, strlen($redirect_url)-1, 1) != '?' && strpos($redirect_url, '&') === false)
        {
            // Nếu biến $redirect_url có '?' nhưng không kết thúc bằng '?' và có chứa dấu '&' thì bổ sung vào cuối
            $redirect_url .= '&';
        }

        // Tạo đoạn url chứa tham số
        $url_params = '';
        foreach ($params as $key=>$value)
        {
            if ($url_params == '')
                $url_params .= $key . '=' . urlencode($value);
            else
                $url_params .= '&' . $key . '=' . urlencode($value);
        }
        return $redirect_url.$url_params;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm baokim_verifyresponseurl
 *
 * Hàm thực hiện xác minh tính chính xác thông tin trả về từ BaoKim.vn
 * 
 * @return true nếu thông tin là chính xác, false nếu thông tin không chính xác
 */
if ( ! function_exists('baokim_verifyresponseurl'))
{
    function baokim_verifyresponseurl()
    {
        $ci =& get_instance();
        $checksum = $ci->input->get('checksum', true);
        $transaction_status = $ci->input->get('transaction_status', true);

        $url_params = array(
            'order_id' => $ci->input->get('order_id', true),
            'transaction_id' => $ci->input->get('transaction_id', true),
            'created_on' => $ci->input->get('created_on', true),
            'payment_type' => $ci->input->get('payment_type', true),
            'transaction_status' => $transaction_status,
            'total_amount' => $ci->input->get('total_amount', true),
            'net_amount' => $ci->input->get('net_amount', true),
            'fee_amount' => $ci->input->get('fee_amount', true),
            'merchant_id' => $ci->input->get('merchant_id', true),
            'customer_name' => $ci->input->get('customer_name', true),
            'customer_email' => $ci->input->get('customer_email', true),
            'customer_phone' => $ci->input->get('customer_phone', true),
            'customer_address' => $ci->input->get('customer_address', true)
        );
        
        ksort($url_params);

        if($transaction_status == 4 && strcasecmp($checksum, hash_hmac('SHA1', implode('', $url_params), $GLOBALS['cfg']['baokim_merchantpass'])) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm sohapay_buildcheckouturl
 *
 * Xây dựng url chuyển đến Sohapay thực hiện thanh toán
 * 
 * @param $code                 Mã đơn hàng
 * @param $total                Giá trị đơn hàng
 * @param $order_email          Email người mua
 * @param $order_mobile         Điện thoại người mua
 * @param $return               Url trả về khi thanh toán thành công
 * @param $embed_type           Kiểu url khởi tạo
 * @return url cần tạo
 */
if ( ! function_exists('sohapay_buildcheckouturl'))
{
    function sohapay_buildcheckouturl($code, $total, $transaction, $order_email = '', $order_mobile = '', $return, $embed_type = 'desktop')
    {
        // Mảng các tham số chuyển tới Soha Payment
        $arr_param = array(
            'site_code'         =>  strval($GLOBALS['cfg']['sohapay_merchantcode']),
            'return_url'        =>  strval($return),
            'transaction_info'  =>  strval($transaction),
            'order_code'        =>  strval($code),
            'price'             =>  strval($total), 
            'order_email'       =>  strval($order_email),
            'order_mobile'      =>  strval($order_mobile),
            'payment_type'      =>  strval(''),
            'language'          =>  strval(''),
            'version'           =>  '2'
        );
        if($embed_type == 'desktop')
        {
            ksort($arr_param);
            /* Bước 2. Kiểm tra  biến $redirect_url xem có '?' không, nếu không có thì bổ sung vào*/
            $redirect_url = $GLOBALS['cfg']['sohapay_url'];
            if (strpos($redirect_url, '?') === false)
            {
                $redirect_url .= '?';
            }
            else if (substr($redirect_url, strlen($redirect_url)-1, 1) != '?' && strpos($redirect_url, '&') === false)
            {
                // Nếu biến $redirect_url có '?' nhưng không kết thúc bằng '?' và có chứa dấu '&' thì bổ sung vào cuối
                $redirect_url .= '&';           
            }
                    
            /* Bước 3. tạo url*/
            $first = true;
            $secure_code = '';
            foreach ($arr_param as $key=>$value)
            {
                if (strlen($value) == 0) continue;
                if ($first == true)
                {
                    $redirect_url .= urlencode($key) . '=' . urlencode($value);
                    $first = false;
                }
                else
                {
                    $redirect_url .= '&' . urlencode($key) . '=' . urlencode($value);
                }
                $secure_code .= $key . "=" . $value . "&";
            }
            $secure_code = rtrim($secure_code, "&");
            if (strlen($secure_code) > 0)
            {
                $redirect_url .= "&secure_hash=" . strtoupper(hash_hmac('SHA256', $secure_code, pack('H*', $GLOBALS['cfg']['sohapay_merchantpass'])));
            }
        }
        else
        {
            //render signature
            ksort($arr_param);
            $signature = '';
            $secure_code = '';
            foreach ($arr_param as $key=>$value)
            {
                $secure_code .= urlencode($key) . "=" . urlencode($value) . "&";
            }
            $secure_code = rtrim($secure_code, "&");
            if (strlen($secure_code) > 0)
            {
                $signature = strtoupper(hash_hmac('SHA256', $secure_code, pack('H*', $GLOBALS['cfg']['sohapay_merchantpass'])));
            }
            $redirect_url = 'https://sohapay.com/smobile/create_order.php?' . $secure_code . '&signature=' . $signature;
        }
        return $redirect_url;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm sohapay_verifyreturnurl
 *
 * Hàm thực hiện xác minh tính chính xác thông tin trả về từ Sohapay
 * 
 * @param $url_params chứa tham số trả về trên url
 * @return true nếu thông tin là chính xác, false nếu thông tin không chính xác
 */
if ( ! function_exists('sohapay_verifyreturnurl'))
{
    function sohapay_verifyreturnurl()
    {
        $ci =& get_instance();
        $secure_hash = $ci->input->get('secure_code', true);
        $error_text = $ci->input->get('error_text', true);

        $param = array(
            'transaction_info' => $ci->input->get('transaction_info', true),
            'order_code' => $ci->input->get('order_code', true),
            'order_email' => $ci->input->get('order_email', true),
            'order_session' => $ci->input->get('order_session', true),
            'price' => $ci->input->get('price', true),
            'site_code' => $ci->input->get('site_code', true),
            'response_code' => $ci->input->get('response_code', true),
            'response_message' => $ci->input->get('response_message', true),
            'payment_id' => $ci->input->get('payment_id', true),
            'payment_type' => $ci->input->get('payment_type', true),
            'payment_time' => $ci->input->get('payment_time', true),
            'error_text' => $error_text,
            'payment_name' => $ci->input->get('payment_name', true),
            'payment_fullname' => $ci->input->get('payment_fullname', true),
            'payment_bank_code' => $ci->input->get('payment_bank_code', true),
            'payment_bank_holder' => $ci->input->get('payment_bank_holder', true),
            'payment_coupon' => $ci->input->get('payment_coupon', true),
        );
    
        ksort($param);

        $md5HashData = '';
        foreach($param as $key => $value)
        {
            if ($key != "secure_code" && strlen($value) > 0)
            {
                $md5HashData .= $key . "=" . $value . "&";
            }
        }
        $md5HashData = rtrim($md5HashData, "&");
        
        if ($error_text == '' && strtoupper($secure_hash) == strtoupper(hash_hmac('SHA256', $md5HashData, pack('H*', $GLOBALS['cfg']['sohapay_merchantpass']))))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm urlseo
 *
 * Tạo chuỗi dạng seo
 *
 * @access  public
 * @param   string [abc Def]
 * @return  string [abc-def]
 */
if ( ! function_exists('urlseo'))
{
    function urlseo($str)
    {
        return url_title($str, '-', true);
    }
}

/* End of file func_helper.php */
/* Location: ./application/helpers/func_helper.php */